package com.itheima.d2_collection_traverse;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.function.Consumer;

/**
 * 1、集合中存储的是元素的什么信息?
 * 集合中存储的是元素对象的地址。
 *
 *       目标：完成电影信息的展示。
 *       new Movie("《肖生克的救赎》" , 9.7 ,  "罗宾斯")
 *       new Movie("《霸王别姬》" , 9.6 ,  "张国荣、张丰毅")
 *       new Movie("《阿甘正传》" , 9.5 ,  "汤姆.汉克斯")
 */
public class CollectionTest04 {
    public static void main(String[] args) {
/*
  分析：执行main方法进入栈内存，创建arraylist对象交给movies变量==在堆内存创建了一个容器对象，把这个容器的地址赋值给movies变量，
  然后通过movies调用add方法往集合里面添加movie对象==先在堆内存中创建一个movie对象，然后把这个movie对象的堆内存地址放到集合容器的第一个位置


         */
        // 1、创建一个集合容器负责存储多部电影对象。
        Collection<Movie> movies = new ArrayList<>();
        movies.add( new Movie("《肖生克的救赎》" , 9.7 ,  "罗宾斯"));
        movies.add( new Movie("《霸王别姬》" , 9.6 ,  "张国荣、张丰毅"));
        movies.add( new Movie("《阿甘正传》" , 9.5 ,  "汤姆.汉克斯"));
        //如果没有重写toString方法，那么直接输出的就是三个电影对象的地址
//[com.itheima.d2_collection_traverse.Movie@776ec8df, com.itheima.d2_collection_traverse.Movie@4eec7777, com.itheima.d2_collection_traverse.Movie@3b07d329]
        System.out.println(movies);

        //三种遍历方法之一：增强for循环
        for (Movie movie : movies) {
            System.out.println("电影名：" + movie.getName());
            System.out.println("评分：" + movie.getScore());
            System.out.println("主演：" + movie.getActor());
            System.out.println("---------------------------------------------");
        }
        System.out.println("---------自己写一遍增强for循环---------------");
        for (Movie movie : movies) {
            System.out.println(movie);
        }

        System.out.println("-----------写一遍迭代器lambda表达式遍历-------------");
        movies.forEach(new Consumer<Movie>() {
            @Override
            public void accept(Movie movie) {
                System.out.println(movie);
            }
        });
        System.out.println("----------用lambda简化迭代器遍历--------");
        movies.forEach(movie -> System.out.println(movie));
        System.out.println("------用实例方法引用再次简化-----------");
        movies.forEach(System.out::println);

        System.out.println("-----------------取到集合的迭代器对象来遍历集合-----------");
        Iterator<Movie> it = movies.iterator();
        while (it.hasNext()){
            System.out.println(it.next());
        }

    }
}
